<!-- HTML header for doxygen 1.8.11-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.11"/>
<title>i2cpwm_board: Topics with subscribers provided by this package</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="styles.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectalign" style="padding-left: 0.5em;">
   <a href="./index.html"><div id="projectname">i2cpwm_board
   &#160;<span id="projectnumber">0.5.1</span>
   </div></a>
   <div id="projectbrief">ROS Package for PCA9685 based 16 channel PWM Board with I2C Interface</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
</div><!-- top -->
<div class="header">
  <div class="summary">
<a href="#func-members">Functions</a>  </div>
  <div class="headertitle">
<div class="title">Topics with subscribers provided by this package</div>  </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:gaa3fe8c6f5a98243c302c0d27cea219d9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___topics.html#gaa3fe8c6f5a98243c302c0d27cea219d9">servos_absolute</a> (const i2cpwm_board::ServoArray::ConstPtr &amp;msg)</td></tr>
<tr class="memdesc:gaa3fe8c6f5a98243c302c0d27cea219d9"><td class="mdescLeft">&#160;</td><td class="mdescRight">subscriber topic to move servos in a physical position  <a href="#gaa3fe8c6f5a98243c302c0d27cea219d9">More...</a><br /></td></tr>
<tr class="separator:gaa3fe8c6f5a98243c302c0d27cea219d9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga1262b2e51072c237c51b6de4cb199e53"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___topics.html#ga1262b2e51072c237c51b6de4cb199e53">servos_proportional</a> (const i2cpwm_board::ServoArray::ConstPtr &amp;msg)</td></tr>
<tr class="memdesc:ga1262b2e51072c237c51b6de4cb199e53"><td class="mdescLeft">&#160;</td><td class="mdescRight">subscriber topic to move servos in the range of ±1.0  <a href="#ga1262b2e51072c237c51b6de4cb199e53">More...</a><br /></td></tr>
<tr class="separator:ga1262b2e51072c237c51b6de4cb199e53"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gae257665eb64139d2720ed332e61507c6"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___topics.html#gae257665eb64139d2720ed332e61507c6">servos_drive</a> (const geometry_msgs::Twist::ConstPtr &amp;msg)</td></tr>
<tr class="memdesc:gae257665eb64139d2720ed332e61507c6"><td class="mdescLeft">&#160;</td><td class="mdescRight">subscriber topic to move servos based on a drive mode  <a href="#gae257665eb64139d2720ed332e61507c6">More...</a><br /></td></tr>
<tr class="separator:gae257665eb64139d2720ed332e61507c6"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<h2 class="groupheader">Function Documentation</h2>
<a class="anchor" id="gaa3fe8c6f5a98243c302c0d27cea219d9"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void servos_absolute </td>
          <td>(</td>
          <td class="paramtype">const i2cpwm_board::ServoArray::ConstPtr &amp;&#160;</td>
          <td class="paramname"><em>msg</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p><code>#include &lt;<a class="el" href="i2cpwm__controller_8cpp.html">src/i2cpwm_controller.cpp</a>&gt;</code></p>

<p>subscriber topic to move servos in a physical position </p>
<p>Subscriber for the servos_absolute topic which processes one or more servos and sets their physical pulse value.</p>
<p>When working with a continuous rotation servo, the topic is used to find the center position of a servo by sending successive values until a stopped position is identified. The topic is also used to find the range of a servo - the fastest forward and fasted reverse values. The difference between these two is the servo's range. Due to variences in servos, each will likely have a slightly different center value.</p>
<p>When working with a fixed 180 degree rotation servo, the topic is used to find the center position of a servo by sending successive values until a the desired middle is identified. The topic is also used to find the range of a servo - the maximum clockwise and anti clockwise positions. The difference between these two is the servo's range. If the servo rotates slightly more in one direction from center than the other, then '2X' the lesser value should be used as the range to preserve the middle stop position.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">msg</td><td>a 'ServoArray' message (array of one or more 'Servo') where the servo:value is the pulse position/speed</td></tr>
  </table>
  </dd>
</dl>
<p><b>i2cpwm_board::ServoArray</b> </p><div class="fragment"><div class="line"># the ServoArray message is commonly used message in this package to</div><div class="line"># handle multiple assignments of values to servos. the purpose of</div><div class="line"># the value is dependent on the topic or service being called</div><div class="line"></div><div class="line">Servo[] servos</div></div><!-- fragment --><p> <b>i2cpwm_board::Servo</b> </p><div class="fragment"><div class="line"># the Servo message is commonly used message in this package to</div><div class="line"># assign a value to a specific servo. the purpose of the value is</div><div class="line"># dependent on the topic or service being called</div><div class="line"></div><div class="line">int16 servo</div><div class="line">float32 value</div></div><!-- fragment --><p><b>Example</b> </p><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;# this example makes the following assumptions about the hardware</div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;# the servos have been connected to the PWM board starting with the first connector and proceeding in order</div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;# any drive servos used for the left side servos are mounted opposite of those for the right side</div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;</div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;# the follow message sets the PWM value of the first two servos to 250 and 350 respectively.</div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;# depending on center value of each servo, these values may casue forward or backward rotation</div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;</div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;rostopic pub -1 /servos_absolute i2cpwm_board/ServoArray &quot;{servos:[{servo: 1, value: 250}, {servo: 2, value: 350}]}&quot;</div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;</div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;# the following messages are an example of finding a continuous servo&#39;s center</div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;# in this example the center is found to be 333</div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;</div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;rostopic pub -1 /servos_absolute i2cpwm_board/ServoArray &quot;{servos:[{servo: 1, value: 300}]}&quot;</div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;rostopic pub -1 /servos_absolute i2cpwm_board/ServoArray &quot;{servos:[{servo: 1, value: 350}]}&quot;</div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;rostopic pub -1 /servos_absolute i2cpwm_board/ServoArray &quot;{servos:[{servo: 1, value: 320}]}&quot;</div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;rostopic pub -1 /servos_absolute i2cpwm_board/ServoArray &quot;{servos:[{servo: 1, value: 330}]}&quot;</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;rostopic pub -1 /servos_absolute i2cpwm_board/ServoArray &quot;{servos:[{servo: 1, value: 335}]}&quot;</div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;rostopic pub -1 /servos_absolute i2cpwm_board/ServoArray &quot;{servos:[{servo: 1, value: 333}]}&quot;</div></div><!-- fragment --> 
<p>Definition at line <a class="el" href="i2cpwm__controller_8cpp_source.html#l00797">797</a> of file <a class="el" href="i2cpwm__controller_8cpp_source.html">i2cpwm_controller.cpp</a>.</p>

</div>
</div>
<a class="anchor" id="ga1262b2e51072c237c51b6de4cb199e53"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void servos_proportional </td>
          <td>(</td>
          <td class="paramtype">const i2cpwm_board::ServoArray::ConstPtr &amp;&#160;</td>
          <td class="paramname"><em>msg</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p><code>#include &lt;<a class="el" href="i2cpwm__controller_8cpp.html">src/i2cpwm_controller.cpp</a>&gt;</code></p>

<p>subscriber topic to move servos in the range of ±1.0 </p>
<p>Subscriber for controlling servos using proportional values. This topic processes one or more servos and sets their physical pulse value based on each servos physical range proportional to a range of ±1.0.</p>
<p>When working with a continuous rotation servo, the topic is used to adjust the speed of the servo.</p>
<p>When working with a fixed 180 degree rotation servo, the topic is used to adjust the position of the servo.</p>
<p>This topic requires the use of the <a class="el" href="group___services.html#gabf512716d4497c6a4cb7bf9c5d94e2f1" title="store configuration data for servos on the active board ">config_servos()</a> service. Once the configuration of the servos - center position, direction of rotation, and PWM range - has been set, these data are to convert the proportional value to a physical PWM value specific to each servo.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">msg</td><td>a 'ServoArray' message (array of one or more 'Servo') where the servo:value is a relative position/speed</td></tr>
  </table>
  </dd>
</dl>
<p><b>i2cpwm_board::ServoArray Message</b> </p><div class="fragment"><div class="line"># the ServoArray message is commonly used message in this package to</div><div class="line"># handle multiple assignments of values to servos. the purpose of</div><div class="line"># the value is dependent on the topic or service being called</div><div class="line"></div><div class="line">Servo[] servos</div></div><!-- fragment --><p> <b>i2cpwm_board::Servo Message</b> </p><div class="fragment"><div class="line"># the Servo message is commonly used message in this package to</div><div class="line"># assign a value to a specific servo. the purpose of the value is</div><div class="line"># dependent on the topic or service being called</div><div class="line"></div><div class="line">int16 servo</div><div class="line">float32 value</div></div><!-- fragment --><p><b>Example</b> </p><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;# this example makes the following assumptions about the hardware</div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;# the servos have been connected to the PWM board starting with the first connector and proceeding in order</div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;# any drive servos used for the left side servos are mounted opposite of those for the right side</div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;</div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;# this example uses 2 servos</div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;# the first servo is the left and the second servo is the right</div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;</div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;# configure two continuous rotation servos associated with the drive system - these servos were determined to have a ragee of ±50</div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;</div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;rosservice call /config_servos &quot;servos: [{servo: 1, center: 333, range: 100, direction: -1}, \</div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;                                         {servo: 2, center: 336, range: 108, direction: 1}]&quot;</div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;</div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;# drive both servos forward at 40% of maximum speed</div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;</div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;rostopic pub -1 /servos_proportional i2cpwm_board/ServoArray &quot;{servos:[{servo: 1, value: 0.40}, {servo: 2, value: 0.40}]}&quot;</div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;# additionally configure one 180 degree servo (±90) used for a robot arm - this servo was determine to have a ragee of ±188</div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;</div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;rosservice call /config_servos &quot;servos: [{servo: 9, center: 344, range: 376, direction: -1}]&quot; </div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;</div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;# drive the arm servo to its 45 degree position and then to its -45 degree position</div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;rostopic pub -1 /servos_proportional i2cpwm_board/ServoArray &quot;{servos:[{servo: 9, value: 0.50}]}&quot;</div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;rostopic pub -1 /servos_proportional i2cpwm_board/ServoArray &quot;{servos:[{servo: 9, value: -0.50}]}&quot;</div></div><!-- fragment --> 
<p>Definition at line <a class="el" href="i2cpwm__controller_8cpp_source.html#l00867">867</a> of file <a class="el" href="i2cpwm__controller_8cpp_source.html">i2cpwm_controller.cpp</a>.</p>

</div>
</div>
<a class="anchor" id="gae257665eb64139d2720ed332e61507c6"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void servos_drive </td>
          <td>(</td>
          <td class="paramtype">const geometry_msgs::Twist::ConstPtr &amp;&#160;</td>
          <td class="paramname"><em>msg</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p><code>#include &lt;<a class="el" href="i2cpwm__controller_8cpp.html">src/i2cpwm_controller.cpp</a>&gt;</code></p>

<p>subscriber topic to move servos based on a drive mode </p>
<p>Subscriber for controlling a group of servos in concert based on a geometry_msgs::Twist message.</p>
<p>This topic requires the use the <a class="el" href="group___services.html#gabf512716d4497c6a4cb7bf9c5d94e2f1" title="store configuration data for servos on the active board ">config_servos()</a> service to configure the servos for proportional control and the use of the <a class="el" href="group___services.html#gae3222f92a0cd33b0d0a2fcfd6d563ba9" title="set drive mode and drive servos ">config_drive_mode()</a> to speccify the desired type of drive and to assign individual servos to the positions in the drive system.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">msg</td><td>a geometry Twist message</td></tr>
  </table>
  </dd>
</dl>
<p><b>geometry_msgs::Twist</b> </p><div class="fragment"><div class="line"># This expresses velocity in free space broken into its linear and angular parts.</div><div class="line">Vector3  linear</div><div class="line">Vector3  angular</div></div><!-- fragment --><p> <b>geometry_msgs::Vector3</b> </p><div class="fragment"><div class="line"># This represents a vector in free space. </div><div class="line"># It is only meant to represent a direction. Therefore, it does not</div><div class="line"># make sense to apply a translation to it (e.g., when applying a </div><div class="line"># generic rigid transformation to a Vector3, tf2 will only apply the</div><div class="line"># rotation). If you want your data to be translatable too, use the</div><div class="line"># geometry_msgs/Point message instead.</div><div class="line"></div><div class="line">float64 x</div><div class="line">float64 y</div><div class="line">float64 z</div></div><!-- fragment --><p><b>Example</b> </p><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;# this example makes the following assumptions about the hardware</div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;# the servos have been connected to the PWM board starting with the first connector and proceeding in order</div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;# any drive servos used for the left side servos are mounted opposite of those for the right side</div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;</div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;# ROS used m/s (meters per second) as th standard unit for velocity.</div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;# The geometry_msgs::Twist linear and angular vectors are in m/s and radians/s respectively.</div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;</div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;# a typical high-speed servo is capable of 0.16-0.2 sec/60deg or aproximately 50-65 RPM.</div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;# using wheel with 11 cm diameter results in a circumference of 0.35 meters</div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;# the theoretical maximum speed of this combination is 0.30 m/s - 0.40 m/s</div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;</div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;</div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;# differential drive example</div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;# this example uses 2 servos</div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;# the first servo is the left and the second servo is the right</div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;# configure drive mode for two RC servos attached to 110mm diameter wheels </div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;</div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;rosservice call /config_servos &quot;servos: [{servo: 1, center: 333, range: 100, direction: -1}, \</div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;                                         {servo: 2, center: 336, range: 108, direction: 1}]&quot;</div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;</div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;rosservice call /config_drive_mode &quot;{mode: differential, rpm: 60.0, radius: 5.5, track: 5, scale: 1.0, \</div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;                                     servos: [{servo: 1, value: 1}, {servo: 2, value: 2}]}&quot;</div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;</div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;# moving forward at 0.35 m/s (or best speed)</div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;</div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;rostopic pub -1 /servos_drive geometry_msgs/Twist &quot;{linear: [0.35, 0.0, 0.0], angular: [0.0, 0.0, 0.0]}&quot;</div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;</div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;# left 45 degrees per second turn while moving forward at 0.35 m/s (or best speed)</div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;</div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;rostopic pub -1 /servos_drive geometry_msgs/Twist &quot;{linear: [0.35, 0.0, 0.0], angular: [0.0, 0.0, -0.7854]}&quot;</div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;</div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;# pivoting clockwise at 90 degrees per second</div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;</div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;rostopic pub -1 /servos_drive geometry_msgs/Twist &quot;{linear: [0.0, 0.0, 0.0], angular: [0.0, 0.0, 1.5708]}&quot;</div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;</div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;</div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;# a mecanum drive example</div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;# this example assumes there are 4 servos</div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;# the servos are 1, 2, 3, &amp; 4 and correspond to left-front, right-front, left-rear, and right-rear</div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;</div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;# configure drive mode for four servos</div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;</div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;rosservice call /config_servos &quot;servos: [{servo: 1, center: 333, range: 100, direction: 1},  \</div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;                                         {servo: 2, center: 336, range: 108, direction: -1}, \</div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;                                        {servo: 3, center: 337, range: 102, direction: -1}, \</div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;                                        {servo: 4, center: 330, range: 100, direction: -1}]&quot;</div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;</div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;rosservice call /config_drive_mode &quot;{mode: mecanum,  rpm: 60.0, radius: 5.5, track: 5, scale: 1.0, \</div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;                                     servos: [{servo: 1, value: 2}, {servo: 2, value: 1}, \</div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;                                              {servo: 3, value: 3}, {servo: 4, value: 4}]}&quot; </div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;</div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;# moving forward at full speed</div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;</div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;rostopic pub -1 /servos_drive geometry_msgs/Twist &quot;{linear: [0.35.0, 0.0, 0.0], angular: [0.0, 0.0, 0.0]}&quot;</div><div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;</div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;# moving forward and to the right while always facing forward</div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;</div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;rostopic pub -1 /servos_drive geometry_msgs/Twist &quot;{linear: [0.35, 0.15, 0.0], angular: [0.0, 0.0, 0.0]}&quot;</div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;</div><div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;# right turn while moving forward</div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;</div><div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;rostopic pub -1 /servos_drive geometry_msgs/Twist &quot;{linear: [0.35, 0.0, 0.0], angular: [0.0, 0.0, 0.7854]}&quot;</div><div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;</div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;# pivoting clockwise</div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;</div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;rostopic pub -1 /servos_drive geometry_msgs/Twist &quot;{linear: [0.0, 0.0, 0.0], angular: [0.0, 0.0, 1.5708]}&quot;</div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;</div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;# moving sideways to the right</div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;</div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;rostopic pub -1 /servos_drive geometry_msgs/Twist &quot;{linear: [0.0, 0.2, 0.0], angular: [0.0, 0.0, 0.0]}&quot;</div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;</div><div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;# moving sideways to the left</div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;</div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;rostopic pub -1 /servos_drive geometry_msgs/Twist &quot;{linear: [0.0, -0.2, 0.0], angular: [0.0, 0.0, 0.0]}&quot;</div></div><!-- fragment --> 
<p>Definition at line <a class="el" href="i2cpwm__controller_8cpp_source.html#l00976">976</a> of file <a class="el" href="i2cpwm__controller_8cpp_source.html">i2cpwm_controller.cpp</a>.</p>

</div>
</div>
</div><!-- contents -->
<!-- HTML footer for doxygen 1.8.11-->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.11
</small></address>
</body>
</html>
